/* eslint-disable no-undef */
import axios from 'axios'
// qs 是对 post 请求 data 进行处理，不然后台接收不了数据
// 因为axios post请求默认Content-type是 application/json
// import qs from 'qs'
// import router from '../router/index'
import ElementUI from 'element-ui'

axios.defaults.timeout = 60000 // 60s没响应则认为该请求失败
axios.defaults.baseURL = 'http://localhost:8081/myStstem'
axios.defaults.withCredentials = false // 跨域时如果要带上cookie话则需要设置withCrendentials

// http request 拦截器 所有请求发出前都需要执行以下代码
axios.interceptors.request.use(
  request => {
    // if (request.url === '/oauth2/accessToken.json') {
    // request.data = qs.stringify(request.data) // 这里就用qs对data就行序列化处理
    //   request.headers.post['Content-Type'] = 'application/x-www-form-urlencoded' // 设置header覆盖content-type
    // } else {
    request.data = JSON.stringify(request.data) // 这里就用qs对data就行JSON处理
    request.headers.post['Content-Type'] = 'application/json;charset=utf-8' // 设置header覆盖content-type

    //   // 判断token是否存在和是否需要token验证的路由
    //   if (localStorage.getItem('Authorization')) {
    //     request.headers.Authorization = localStorage.getItem('Authorization')
    //     request.headers.post['client_id'] = globalConfig.client_id // 设置header的client_id
    //     request.headers.post['apiVersion'] = globalConfig.apiVersion // 设置header的apiVersion
    //   }
    // }
    //  console.log('request==>', request)
    return request
  },
  error => {
    // 请求错误时做些事
    ElementUI.Message.error('发起服务器请求失败!')
    return Promise.reject(error)
  }
)

// 响应时拦截
axios.interceptors.response.use(
  response => {
    // 返回响应时做一些处理
    // if (response.data && (response.data.code === '400' || response.data.code === '40100' || response.data.code === '40103' || response.data.code === '40104')) {
    //   // token无效清空token
    //   localStorage.removeItem('Authorization')
    //   // 跳转登录页面
    //   ElementUI.Message.error('登录超时!')
    //   router.push({ path: '/login' })
    // }
    //  console.log('response==>', response)
    return response
  },
  error => {
    // 返回响应异常时做一些处理
    ElementUI.Message.error('发起服务器请求失败!')
    return Promise.reject(error)
  }
)

// 错误处理
function checkStatus (response) {
  return new Promise((resolve, reject) => {
    if (response.status === 200) {
      resolve(response.data)
    } else {
      reject(response.data)
    }
  })
}

// POST 方法封装 (处理参数与文件上传)
export const postRequest = (url, params) => {
  return axios({
    method: 'post',
    url: url,
    data: params
  }).then(checkStatus)
}
// POST 方法封装 (处理参数与文件上传)(返回文件流转成blob下载)
export const postDownloadFileRequest = (url, params) => {
  return axios({
    method: 'post',
    url: url,
    responseType: 'blob',
    data: params
  }).then(checkStatus)
}

//  GET 方法封装
export const getRequest = (url, params) => {
  return axios({
    method: 'get',
    url: url,
    params: params
  }).then(checkStatus)
}
